const customMenu = Cherry.createMenuHook('导入',  {
    iconName: '',
    onClick: function(selection) {
        const input = document.createElement('input');
        input.type = 'file';
        input.accept = '.md,.markdown,.txt';
        input.onchange = e => {
            const file = e.target.files[0];
            if (!file) return;
            const reader = new FileReader();
            reader.onload = event => {
                editor.setMarkdown(event.target.result);
            };
            reader.readAsText(file);
        };
        input.click();
    }
});
const editor = new Cherry({
    id: 'markdown-editor',
    value: "## 新的文档\n\n从这里开始编辑..",
    fileUpload: myUpload,
    nameSpace: 'cherry',
    engine: {
        global: {
            htmlWhiteList: 'p|a|img|ul|ol|li|blockquote|pre|code|table|thead|tbody|tr|th|td',
            inlineStyle: false
        },
    },
    themeSettings: {
        // 主题列表，用于切换主题
        themeList: [
            { className: 'default', label: '默认' },
            { className: 'dark', label: '黑' },
            { className: 'light', label: '白' },
            { className: 'green', label: '绿' },
            { className: 'red', label: '粉' },
            { className: 'violet', label: '紫' },
            { className: 'blue', label: '蓝' },
        ],
        // 目前应用的主题
        mainTheme: 'default',
        // 目前应用的代码块主题
        codeBlockTheme: 'default',
    },
    toolbars: {
        toolbar: [
            'undo', 'redo', '|',
            {bold:['bold', 'italic', 'underline', 'strikethrough', 'sub', 'sup']},
            'color', '|', 'header', 'list', '|',
            {insert: ['image', 'link', 'hr', 'br', 'code', 'table', 'quote']},
            '|','import','export','|','theme',
            'togglePreview',
        ],
        sidebar: ['mobilePreview', 'copy', 'theme'],
        customMenu: {
            import: customMenu,
        },
    },
});
function myUpload(file, callback) {
    let formData = new FormData();
    formData.append('file', file); // 将文件对象添加到 FormData 中
    $.ajax({
        url: GV.upload_api, // PHP 上传接口
        type: 'POST',
        data: formData,
        processData: false,
        contentType: false,
        success: (ret) => {
            if (ret.status === 1) {
                callback(ret.data.url); // 返回url地址
            } else {
                console.log(ret.msg); // 错误信息
            }
        },
    });
}

/**
 * 获取最纯净的HTML内容（最终修正版）
 * @returns {string} 纯净HTML（保留代码高亮）
 */
function getPureHtml() {
    const rawHtml = editor.getHtml();
    const doc = new DOMParser().parseFromString(rawHtml, 'text/html');

    // 1. 移除所有不需要的属性
    doc.querySelectorAll('*').forEach(element => {
        const tagName = element.tagName.toLowerCase();

        // 特殊处理：保留代码块的language-类
        if (tagName === 'code') {
            // 查找并保留language-开头的class
            const languageClass = Array.from(element.classList)
                .find(cls => cls.startsWith('language-'));
            element.className = languageClass || '';
            return;
        }

        // 移除所有属性（保留必要的如img的src、a的href等）
        Array.from(element.attributes).forEach(attr => {
            if (!['src', 'alt', 'href', 'target'].includes(attr.name)) {
                element.removeAttribute(attr.name);
            }
        });

        // 特殊处理：移除a标签但保留文本和有效链接
        if (tagName === 'a') {
            const href = element.getAttribute('href');
            const text = element.textContent;
            if (href && !href.startsWith('#')) { // 保留有效链接
                element.setAttribute('target', '_blank');
                element.removeAttribute('class');
                element.removeAttribute('style');
            } else { // 移除锚点
                element.replaceWith(document.createTextNode(text));
            }
        }
    });

    // 2. 移除div包裹但保留内容
    doc.querySelectorAll('div').forEach(div => {
        div.replaceWith(...Array.from(div.childNodes));
    });

    // 3. 处理代码块（保留高亮）
    doc.querySelectorAll('pre').forEach(pre => {
        pre.removeAttribute('style');
        const code = pre.querySelector('code') || pre;

        // 保留语言类（如"language-javascript"）
        const languageClass = Array.from(code.classList)
            .find(cls => cls.startsWith('language-'));

        // 创建干净的代码块
        const cleanPre = document.createElement('pre');
        const cleanCode = document.createElement('code');

        // 保留语言类用于高亮
        if (languageClass) {
            cleanCode.className = languageClass;
        }

        // 安全设置内容（让浏览器自动转义）
        cleanCode.textContent = code.textContent;
        cleanPre.appendChild(cleanCode);

        // 替换原始代码块
        pre.replaceWith(cleanPre);
    });

    // 4. 处理图片
    doc.querySelectorAll('img').forEach(img => {
        ['width', 'height', 'style', 'class'].forEach(attr => {
            img.removeAttribute(attr);
        });
    });

    // 5. 处理列表
    doc.querySelectorAll('ul, ol, li').forEach(el => {
        ['style'].forEach(attr => el.removeAttribute(attr));
    });

    return doc.body.innerHTML;
}

$('#submit').click(function(){
    $('#markdown-content').text(editor.getMarkdown());
    $('#html-content').text(getPureHtml());
    //$('#toc-content').text(editor.getToc());
});